-- local skynet = require "skynet"
-- require "skynet.manager"    -- import skynet.register
-- local db = {}

-- local command = {}


-- function command.GET(key)
--     return db[key]
-- end

-- function command.SET(key, value)
--     db[key] = value
-- end

-- skynet.start(function()
--     skynet.dispatch("lua", function(session, address, cmd, ...)
--          skynet.error("lua dispatch ", coroutine.running()) --这个协程接收消息的
--         skynet.fork(function(cmd, ...)       --开启一个新的协程来处理响应
--              skynet.error("fork ", coroutine.running())
--             cmd = cmd:upper()  
--             local f = command[cmd]
--             if f then   
--                 skynet.retpack(f(...)) 
--             else
--                 skynet.error(string.format("Unknown command %s", tostring(cmd)))
--             end
--         end, cmd, ...)
--     end)
--     skynet.register ".mydb"  
-- end)

-- 接受请求的协程和处理消息的协程不一样，查询不到服务的地址， 调用失败返回



--  把发送服务地址以及session打包到闭包中，就可以在任意地方调用了。尽量多用skynet.response进行应答。
local skynet = require "skynet"
require "skynet.manager"    -- import skynet.register
local db = {}
local command = {}

function command.GET(key)
    return db[key]
end

function command.SET(key, value)
    db[key] = value
end

skynet.start(function()
    skynet.dispatch("lua", function(session, address, cmd, ...)
        --先把发送服务地址以及session打包到闭包中，可以在任意地方调用
        local response = skynet.response(skynet.pack) --指定打包函数，必须根据接收到的消息打包函数一致
        skynet.fork(function(cmd, ...)       --开启一个新的协程来处理响应
            skynet.sleep(500)
            cmd = cmd:upper()  
            local f = command[cmd]
            if f then   
                 response(true, f(...)) --第一个参数true表示应答成功，false则应答个错误消息
            else
                skynet.error(string.format("Unknown command %s", tostring(cmd)))
            end
        end, cmd, ...)
    end)
    skynet.register ".mydb"  
end)